#loading the necessary packages
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.3.1 ──
✔ ggplot2 3.3.6     ✔ purrr   0.3.4
✔ tibble  3.1.7     ✔ dplyr   1.0.9
✔ tidyr   1.2.0     ✔ stringr 1.4.0
✔ readr   2.1.2     ✔ forcats 0.5.1
Warning: package ‘ggplot2’ was built under R version 4.2.1Warning: package ‘dplyr’ was built under R version 4.2.1── Conflicts ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
library(janitor)
Warning: package ‘janitor’ was built under R version 4.2.1
Attaching package: ‘janitor’

The following objects are masked from ‘package:stats’:

    chisq.test, fisher.test
library(readxl)
Warning: package ‘readxl’ was built under R version 4.2.1
library(here)
Warning: package ‘here’ was built under R version 4.2.1here() starts at C:/Users/nico-/OneDrive/Desktop/Codeclan/dirty_data_project/dirty_data_project/task_4/dirty_data_task_4
#loading the data
candy_2015 <- read_excel("../raw_data/boing-boing-candy-2015.xlsx") %>% 
  clean_names()
candy_2016 <- read_excel("../raw_data/boing-boing-candy-2016.xlsx") %>% 
  clean_names()
candy_2017 <- read_excel("../raw_data/boing-boing-candy-2017.xlsx") %>% 
  clean_names()
New names:
candy_2016
candy_2015
candy_2017

#order of operations: #decide which variables to keep for the analysis according to business questions # Pivot data the same for all 3 datasets # perform pivot on all three # Investigate other columns

#only keeping variables useful for analysis from 2015 dataset #The variables are a bit confusing. I will only keep variables that are actual food and drop anything which is not food.

candy_2015 <- candy_2015 %>% 
  select(-c(
    cash_or_other_forms_of_legal_tender, 
    creepy_religious_comics_chick_tracts, 
    hugs_actual_physical_hugs, 
    please_leave_any_remarks_or_comments_regarding_your_choices: 
    please_estimate_the_degrees_of_separation_you_have_from_the_following_folks_beyonce_knowles, 
    dental_paraphenalia, 
    generic_brand_acetaminophen, 
    peterson_brand_sidewalk_chalk
))
candy_2015

#time to rename some columns. Maybe not that necessary but I would like to have my final results with neat names.

candy_2015 <- candy_2015 %>% 
  rename("trick_or_treat" = are_you_going_actually_going_trick_or_treating_yourself,
         "grand_bar" = x100_grand_bar, 
         "brown_globs" = anonymous_brown_globs_that_come_in_black_and_orange_wrappers, 
         "any_candy_bar" = any_full_sized_candy_bar, 
         "brach_without_candy_corn" = brach_products_not_including_candy_corn, 
         "high_fructose_corn_syrup" = vials_of_pure_high_fructose_corn_syrup_for_main_lining_into_your_vein, 
         "restaurant_candy" = candy_that_is_clearly_just_the_stuff_given_out_for_free_at_restaurants, 
         "chick_o_sticks"  = chick_o_sticks_we_don_t_know_what_that_is, 
         "old_marshmallow" = those_odd_marshmallow_circus_peanut_things)
candy_2015

#same thing for the 2016 dataset

#selecting only the necessary columns for final analysis
candy_2016 <- candy_2016 %>% 
  select(-c(cash_or_other_forms_of_legal_tender, 
            creepy_religious_comics_chick_tracts, 
            dental_paraphenalia, 
            generic_brand_acetaminophen, 
            hugs_actual_physical_hugs, 
            person_of_interest_season_3_dvd_box_set_not_including_disc_4_with_hilarious_outtakes, 
            sourpatch_kids_i_e_abominations_of_nature, 
            vials_of_pure_high_fructose_corn_syrup_for_main_lining_into_your_vein, 
            please_list_any_items_not_included_above_that_give_you_joy:
              york_peppermint_patties_ignore))
candy_2016
candy_2016 <- candy_2016 %>% 
  rename("trick_or_treat" = are_you_going_actually_going_trick_or_treating_yourself, 
         "gender" = your_gender, 
         "age" = how_old_are_you, 
         "country" = which_country_do_you_live_in, 
         "state_province" = which_state_province_county_do_you_live_in, 
         "grand_bar" = x100_grand_bar, 
         "brown_globs" = anonymous_brown_globs_that_come_in_black_and_orange_wrappers, 
         )
candy_2016

#candy 2017

candy_2017 <- candy_2017 %>% 
  select(-c(q7_joy_other : click_coordinates_x_y))
candy_2017

#clean column: removing the q+numnber_ before variable name

candy_2017 <- candy_2017 %>% 
  rename_with(~ str_remove(., pattern = "q[0-90-9]+_"))
candy_2017

#pivot longer all the datasets

library(tidyr)
#2015
candy_2015 <- candy_2015 %>% 
  pivot_longer("butterfinger":"york_peppermint_patties",
names_to = "candy_type", 
values_to = "rating")
candy_2015
#2016
candy_2016 <- candy_2016 %>% 
  pivot_longer("grand_bar":"york_peppermint_patties",
names_to = "candy_type", 
values_to = "rating")
candy_2016
#2017
candy_2017 <- candy_2017 %>% 
  pivot_longer("100_grand_bar":"york_peppermint_patties",
names_to = "candy_type", 
values_to = "rating")
candy_2017
#binding all the datasets
bind_rows(candy_2015, 
          candy_2016, 
          candy_2017, 
          .id = "year")

#sort out age column and country column

#binding rows, so making sure all the variable have the same name 
candy_2015 <- candy_2015 %>% 
  rename(age = "how_old_are_you")
candy_2015
candy_2017 <- candy_2017 %>% 
  rename(trick_or_treat = "going_out")
candy_2017
#binding the 3 datasets
candy <- bind_rows(candy_2015, 
                            candy_2016, 
                            candy_2017)
candy

#let’s clean once again candy_type

candy <- candy %>% 
  mutate(candy_type = recode(candy_type,
                              "anonymous_brown_globs_that_come_in_black_and_orange_wrappers_a_k_a_mary_janes" = "mary_janes"),
  candy_type = recode(candy_type,"bonkers_the_candy" = "bonkers"),
  candy_type = recode(candy_type,"boxo_raisins" = "box_o_raisins"),
  candy_type = recode(candy_type,"licorice_yes_black" = "licorice"),
  candy_type = recode(candy_type,"sweetums_a_friend_to_diabetes" = "sweetums"))
  candy

#country column

candy <- candy %>% 
  mutate(country = if_else(grepl("(?i)usa+", country),"USA",country)) %>% 
  mutate(country = if_else(grepl("(?i)united s+", country),"USA",country)) %>% 
  mutate(country = if_else(grepl("(?i)amer", country),"USA",country)) %>% 
  mutate(country = if_else(grepl("(?i)stat", country),"USA",country)) %>% 
  mutate(country = if_else(grepl("(?i)subscribe+.*", country),NA_character_,country)) 
#make vectors of USA outliers and some to change to NA values
usa_outliers = c("Alaska", "California", "EUA", "Merica", "Murica", "murrika",
                 "New Jersey", "New York", "North Carolina", "Pittsburgh", 
                 "The Yoo Ess of Aaayyyyyy", "Trumpistan", "U S", "u s a", "u.s.",
                 "U.s.", "U.S.", "u.s.a.", "U.S.A.", "UD", "us", "Us", "US", "US of A",
                 "USSA", "'merica")
change_to_NA = c(1, 30.0, 32, 35, 44.0, 45, 45.0, 46, 47.0, 51.0, 54.0)
change_to_NA2 = c("30.0", "44.0", "45.0", "47.0", "51.0", "54.0")
others = c(
  "A tropical island south of the equator", "A", "Atlantis",
  "Canae", "cascadia ", "Cascadia", "Denial", "Earth", "Fear and Loathing", 
  "god's country", "I don't know anymore", "insanity lately", 
  "there isn't one for old men", "soviet canuckistan", "Narnia", "Neverland",
  "one of the best ones", "See above", "Somewhere", 
  "Subscribe To Dm4uz3 On Youtube", "The republic of Cascadia", "this one", 
  "Europe", " Cascadia", "Cascadia ")
candy
candy <- candy %>%
mutate(country = if_else(country %in% usa_outliers ,
                         "USA", country)) %>% 
  mutate(country = if_else(country %in% others|
                             country %in% change_to_NA|
                             country %in% change_to_NA2, 
                           NA_character_, country)) %>% 
  mutate(country = str_to_title(country)) 
candy
candy <- candy %>%
mutate(country = recode(country, "The Netherlands" = "Netherlands"),
       country = recode(country, "Can" = "Canada"),
       country = recode(country, "Canada`" = "Canada"),
       country = recode(country, "Endland" = "United Kingdom"),
       country = recode(country, "England" = "United Kingdom"),
       country = recode(country, "England" = "United Kingdom"),
       country = recode(country, "Scotland" = "United Kingdom"),
       country = recode(country, "España" = "Spain"),
       country = recode(country, "U.k." = "United Kingdom"),
       country = recode(country, "Uk" = "United Kingdom"),
       country = recode(country, "United Kindom" = "United Kingdom"))
candy
candy <- candy %>% 
  mutate(age = as.numeric(age)) %>% 
  mutate(age = ifelse(age>122, NA, age))
Warning: NAs introduced by coercion
candy
#write data to csv
candy %>% 
  write_csv("../clean_data/candy_clean.csv")
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KYGBge3J9DQojbG9hZGluZyB0aGUgbmVjZXNzYXJ5IHBhY2thZ2VzDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoamFuaXRvcikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShoZXJlKQ0KYGBgDQoNCmBgYHtyfQ0KI2xvYWRpbmcgdGhlIGRhdGENCmNhbmR5XzIwMTUgPC0gcmVhZF9leGNlbCgiLi4vcmF3X2RhdGEvYm9pbmctYm9pbmctY2FuZHktMjAxNS54bHN4IikgJT4lIA0KICBjbGVhbl9uYW1lcygpDQpjYW5keV8yMDE2IDwtIHJlYWRfZXhjZWwoIi4uL3Jhd19kYXRhL2JvaW5nLWJvaW5nLWNhbmR5LTIwMTYueGxzeCIpICU+JSANCiAgY2xlYW5fbmFtZXMoKQ0KY2FuZHlfMjAxNyA8LSByZWFkX2V4Y2VsKCIuLi9yYXdfZGF0YS9ib2luZy1ib2luZy1jYW5keS0yMDE3Lnhsc3giKSAlPiUgDQogIGNsZWFuX25hbWVzKCkNCmBgYA0KDQpgYGB7cn0NCmNhbmR5XzIwMTYNCmNhbmR5XzIwMTUNCmNhbmR5XzIwMTcNCmBgYA0KDQoNCiNvcmRlciBvZiBvcGVyYXRpb25zOiANCiNkZWNpZGUgd2hpY2ggdmFyaWFibGVzIHRvIGtlZXAgZm9yIHRoZSBhbmFseXNpcyBhY2NvcmRpbmcgdG8gYnVzaW5lc3MgcXVlc3Rpb25zDQojIFBpdm90IGRhdGEgdGhlIHNhbWUgZm9yIGFsbCAzIGRhdGFzZXRzDQojIHBlcmZvcm0gcGl2b3Qgb24gYWxsIHRocmVlDQojIEludmVzdGlnYXRlIG90aGVyIGNvbHVtbnMNCg0KDQojb25seSBrZWVwaW5nIHZhcmlhYmxlcyB1c2VmdWwgZm9yIGFuYWx5c2lzIGZyb20gMjAxNSBkYXRhc2V0DQojVGhlIHZhcmlhYmxlcyBhcmUgYSBiaXQgY29uZnVzaW5nLiBJIHdpbGwgb25seSBrZWVwIHZhcmlhYmxlcyB0aGF0IGFyZSBhY3R1YWwgZm9vZCBhbmQgZHJvcCBhbnl0aGluZyB3aGljaCBpcyBub3QgZm9vZC4gIA0KYGBge3J9DQpjYW5keV8yMDE1IDwtIGNhbmR5XzIwMTUgJT4lIA0KICBzZWxlY3QoLWMoDQogICAgY2FzaF9vcl9vdGhlcl9mb3Jtc19vZl9sZWdhbF90ZW5kZXIsIA0KICAgIGNyZWVweV9yZWxpZ2lvdXNfY29taWNzX2NoaWNrX3RyYWN0cywgDQogICAgaHVnc19hY3R1YWxfcGh5c2ljYWxfaHVncywgDQogICAgcGxlYXNlX2xlYXZlX2FueV9yZW1hcmtzX29yX2NvbW1lbnRzX3JlZ2FyZGluZ195b3VyX2Nob2ljZXM6IA0KICAgIHBsZWFzZV9lc3RpbWF0ZV90aGVfZGVncmVlc19vZl9zZXBhcmF0aW9uX3lvdV9oYXZlX2Zyb21fdGhlX2ZvbGxvd2luZ19mb2xrc19iZXlvbmNlX2tub3dsZXMsIA0KICAgIGRlbnRhbF9wYXJhcGhlbmFsaWEsIA0KICAgIGdlbmVyaWNfYnJhbmRfYWNldGFtaW5vcGhlbiwgDQogICAgcGV0ZXJzb25fYnJhbmRfc2lkZXdhbGtfY2hhbGsNCikpDQpjYW5keV8yMDE1DQpgYGANCiN0aW1lIHRvIHJlbmFtZSBzb21lIGNvbHVtbnMuIE1heWJlIG5vdCB0aGF0IG5lY2Vzc2FyeSBidXQgSSB3b3VsZCBsaWtlIHRvIGhhdmUgbXkgZmluYWwgcmVzdWx0cyB3aXRoIG5lYXQgbmFtZXMuIA0KDQpgYGB7cn0NCmNhbmR5XzIwMTUgPC0gY2FuZHlfMjAxNSAlPiUgDQogIHJlbmFtZSgidHJpY2tfb3JfdHJlYXQiID0gYXJlX3lvdV9nb2luZ19hY3R1YWxseV9nb2luZ190cmlja19vcl90cmVhdGluZ195b3Vyc2VsZiwNCiAgICAgICAgICJncmFuZF9iYXIiID0geDEwMF9ncmFuZF9iYXIsIA0KICAgICAgICAgImJyb3duX2dsb2JzIiA9IGFub255bW91c19icm93bl9nbG9ic190aGF0X2NvbWVfaW5fYmxhY2tfYW5kX29yYW5nZV93cmFwcGVycywgDQogICAgICAgICAiYW55X2NhbmR5X2JhciIgPSBhbnlfZnVsbF9zaXplZF9jYW5keV9iYXIsIA0KICAgICAgICAgImJyYWNoX3dpdGhvdXRfY2FuZHlfY29ybiIgPSBicmFjaF9wcm9kdWN0c19ub3RfaW5jbHVkaW5nX2NhbmR5X2Nvcm4sIA0KICAgICAgICAgImhpZ2hfZnJ1Y3Rvc2VfY29ybl9zeXJ1cCIgPSB2aWFsc19vZl9wdXJlX2hpZ2hfZnJ1Y3Rvc2VfY29ybl9zeXJ1cF9mb3JfbWFpbl9saW5pbmdfaW50b195b3VyX3ZlaW4sIA0KICAgICAgICAgInJlc3RhdXJhbnRfY2FuZHkiID0gY2FuZHlfdGhhdF9pc19jbGVhcmx5X2p1c3RfdGhlX3N0dWZmX2dpdmVuX291dF9mb3JfZnJlZV9hdF9yZXN0YXVyYW50cywgDQogICAgICAgICAiY2hpY2tfb19zdGlja3MiICA9IGNoaWNrX29fc3RpY2tzX3dlX2Rvbl90X2tub3dfd2hhdF90aGF0X2lzLCANCiAgICAgICAgICJvbGRfbWFyc2htYWxsb3ciID0gdGhvc2Vfb2RkX21hcnNobWFsbG93X2NpcmN1c19wZWFudXRfdGhpbmdzKQ0KY2FuZHlfMjAxNQ0KYGBgDQojc2FtZSB0aGluZyBmb3IgdGhlIDIwMTYgZGF0YXNldCANCmBgYHtyfQ0KI3NlbGVjdGluZyBvbmx5IHRoZSBuZWNlc3NhcnkgY29sdW1ucyBmb3IgZmluYWwgYW5hbHlzaXMNCmNhbmR5XzIwMTYgPC0gY2FuZHlfMjAxNiAlPiUgDQogIHNlbGVjdCgtYyhjYXNoX29yX290aGVyX2Zvcm1zX29mX2xlZ2FsX3RlbmRlciwgDQogICAgICAgICAgICBjcmVlcHlfcmVsaWdpb3VzX2NvbWljc19jaGlja190cmFjdHMsIA0KICAgICAgICAgICAgZGVudGFsX3BhcmFwaGVuYWxpYSwgDQogICAgICAgICAgICBnZW5lcmljX2JyYW5kX2FjZXRhbWlub3BoZW4sIA0KICAgICAgICAgICAgaHVnc19hY3R1YWxfcGh5c2ljYWxfaHVncywgDQogICAgICAgICAgICBwZXJzb25fb2ZfaW50ZXJlc3Rfc2Vhc29uXzNfZHZkX2JveF9zZXRfbm90X2luY2x1ZGluZ19kaXNjXzRfd2l0aF9oaWxhcmlvdXNfb3V0dGFrZXMsIA0KICAgICAgICAgICAgc291cnBhdGNoX2tpZHNfaV9lX2Fib21pbmF0aW9uc19vZl9uYXR1cmUsIA0KICAgICAgICAgICAgdmlhbHNfb2ZfcHVyZV9oaWdoX2ZydWN0b3NlX2Nvcm5fc3lydXBfZm9yX21haW5fbGluaW5nX2ludG9feW91cl92ZWluLCANCiAgICAgICAgICAgIHBsZWFzZV9saXN0X2FueV9pdGVtc19ub3RfaW5jbHVkZWRfYWJvdmVfdGhhdF9naXZlX3lvdV9qb3k6DQogICAgICAgICAgICAgIHlvcmtfcGVwcGVybWludF9wYXR0aWVzX2lnbm9yZSkpDQpjYW5keV8yMDE2DQpgYGANCg0KYGBge3J9DQpjYW5keV8yMDE2IDwtIGNhbmR5XzIwMTYgJT4lIA0KICByZW5hbWUoInRyaWNrX29yX3RyZWF0IiA9IGFyZV95b3VfZ29pbmdfYWN0dWFsbHlfZ29pbmdfdHJpY2tfb3JfdHJlYXRpbmdfeW91cnNlbGYsIA0KICAgICAgICAgImdlbmRlciIgPSB5b3VyX2dlbmRlciwgDQogICAgICAgICAiYWdlIiA9IGhvd19vbGRfYXJlX3lvdSwgDQogICAgICAgICAiY291bnRyeSIgPSB3aGljaF9jb3VudHJ5X2RvX3lvdV9saXZlX2luLCANCiAgICAgICAgICJzdGF0ZV9wcm92aW5jZSIgPSB3aGljaF9zdGF0ZV9wcm92aW5jZV9jb3VudHlfZG9feW91X2xpdmVfaW4sIA0KICAgICAgICAgImdyYW5kX2JhciIgPSB4MTAwX2dyYW5kX2JhciwgDQogICAgICAgICAiYnJvd25fZ2xvYnMiID0gYW5vbnltb3VzX2Jyb3duX2dsb2JzX3RoYXRfY29tZV9pbl9ibGFja19hbmRfb3JhbmdlX3dyYXBwZXJzLCANCiAgICAgICAgICkNCmNhbmR5XzIwMTYNCmBgYA0KI2NhbmR5IDIwMTcNCg0KYGBge3J9DQpjYW5keV8yMDE3IDwtIGNhbmR5XzIwMTcgJT4lIA0KICBzZWxlY3QoLWMocTdfam95X290aGVyIDogY2xpY2tfY29vcmRpbmF0ZXNfeF95KSkNCmNhbmR5XzIwMTcNCmBgYA0KI2NsZWFuIGNvbHVtbjogcmVtb3ZpbmcgdGhlIHErbnVtbmJlcl8gYmVmb3JlIHZhcmlhYmxlIG5hbWUgDQoNCmBgYHtyfQ0KY2FuZHlfMjAxNyA8LSBjYW5keV8yMDE3ICU+JSANCiAgcmVuYW1lX3dpdGgofiBzdHJfcmVtb3ZlKC4sIHBhdHRlcm4gPSAicVswLTkwLTldK18iKSkNCmNhbmR5XzIwMTcNCmBgYA0KDQojcGl2b3QgbG9uZ2VyIGFsbCB0aGUgZGF0YXNldHMNCmBgYHtyfQ0KbGlicmFyeSh0aWR5cikNCmBgYA0KYGBge3J9DQojMjAxNQ0KY2FuZHlfMjAxNSA8LSBjYW5keV8yMDE1ICU+JSANCiAgcGl2b3RfbG9uZ2VyKCJidXR0ZXJmaW5nZXIiOiJ5b3JrX3BlcHBlcm1pbnRfcGF0dGllcyIsDQpuYW1lc190byA9ICJjYW5keV90eXBlIiwgDQp2YWx1ZXNfdG8gPSAicmF0aW5nIikNCmNhbmR5XzIwMTUNCmBgYA0KYGBge3J9DQojMjAxNg0KY2FuZHlfMjAxNiA8LSBjYW5keV8yMDE2ICU+JSANCiAgcGl2b3RfbG9uZ2VyKCJncmFuZF9iYXIiOiJ5b3JrX3BlcHBlcm1pbnRfcGF0dGllcyIsDQpuYW1lc190byA9ICJjYW5keV90eXBlIiwgDQp2YWx1ZXNfdG8gPSAicmF0aW5nIikNCmNhbmR5XzIwMTYNCmBgYA0KDQoNCmBgYHtyfQ0KIzIwMTcNCmNhbmR5XzIwMTcgPC0gY2FuZHlfMjAxNyAlPiUgDQogIHBpdm90X2xvbmdlcigiMTAwX2dyYW5kX2JhciI6InlvcmtfcGVwcGVybWludF9wYXR0aWVzIiwNCm5hbWVzX3RvID0gImNhbmR5X3R5cGUiLCANCnZhbHVlc190byA9ICJyYXRpbmciKQ0KY2FuZHlfMjAxNw0KYGBgDQpgYGB7cn0NCiNiaW5kaW5nIGFsbCB0aGUgZGF0YXNldHMNCmJpbmRfcm93cyhjYW5keV8yMDE1LCANCiAgICAgICAgICBjYW5keV8yMDE2LCANCiAgICAgICAgICBjYW5keV8yMDE3LCANCiAgICAgICAgICAuaWQgPSAieWVhciIpDQpgYGANCg0KDQojc29ydCBvdXQgYWdlIGNvbHVtbiBhbmQgY291bnRyeSBjb2x1bW4gDQoNCmBgYHtyfQ0KI2JpbmRpbmcgcm93cywgc28gbWFraW5nIHN1cmUgYWxsIHRoZSB2YXJpYWJsZSBoYXZlIHRoZSBzYW1lIG5hbWUgDQpjYW5keV8yMDE1IDwtIGNhbmR5XzIwMTUgJT4lIA0KICByZW5hbWUoYWdlID0gImhvd19vbGRfYXJlX3lvdSIpDQpjYW5keV8yMDE1DQpjYW5keV8yMDE3IDwtIGNhbmR5XzIwMTcgJT4lIA0KICByZW5hbWUodHJpY2tfb3JfdHJlYXQgPSAiZ29pbmdfb3V0IikNCmNhbmR5XzIwMTcNCmBgYA0KDQpgYGB7cn0NCiNiaW5kaW5nIHRoZSAzIGRhdGFzZXRzDQpjYW5keSA8LSBiaW5kX3Jvd3MoY2FuZHlfMjAxNSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZHlfMjAxNiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZHlfMjAxNykNCmNhbmR5DQpgYGANCg0KI2xldCdzIGNsZWFuIG9uY2UgYWdhaW4gY2FuZHlfdHlwZSANCmBgYHtyfQ0KY2FuZHkgPC0gY2FuZHkgJT4lIA0KICBtdXRhdGUoY2FuZHlfdHlwZSA9IHJlY29kZShjYW5keV90eXBlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFub255bW91c19icm93bl9nbG9ic190aGF0X2NvbWVfaW5fYmxhY2tfYW5kX29yYW5nZV93cmFwcGVyc19hX2tfYV9tYXJ5X2phbmVzIiA9ICJtYXJ5X2phbmVzIiksDQogIGNhbmR5X3R5cGUgPSByZWNvZGUoY2FuZHlfdHlwZSwiYm9ua2Vyc190aGVfY2FuZHkiID0gImJvbmtlcnMiKSwNCiAgY2FuZHlfdHlwZSA9IHJlY29kZShjYW5keV90eXBlLCJib3hvX3JhaXNpbnMiID0gImJveF9vX3JhaXNpbnMiKSwNCiAgY2FuZHlfdHlwZSA9IHJlY29kZShjYW5keV90eXBlLCJsaWNvcmljZV95ZXNfYmxhY2siID0gImxpY29yaWNlIiksDQogIGNhbmR5X3R5cGUgPSByZWNvZGUoY2FuZHlfdHlwZSwic3dlZXR1bXNfYV9mcmllbmRfdG9fZGlhYmV0ZXMiID0gInN3ZWV0dW1zIikpDQogIGNhbmR5DQpgYGANCiNjb3VudHJ5IGNvbHVtbg0KDQpgYGB7cn0NCmNhbmR5IDwtIGNhbmR5ICU+JSANCiAgbXV0YXRlKGNvdW50cnkgPSBpZl9lbHNlKGdyZXBsKCIoP2kpdXNhKyIsIGNvdW50cnkpLCJVU0EiLGNvdW50cnkpKSAlPiUgDQogIG11dGF0ZShjb3VudHJ5ID0gaWZfZWxzZShncmVwbCgiKD9pKXVuaXRlZCBzKyIsIGNvdW50cnkpLCJVU0EiLGNvdW50cnkpKSAlPiUgDQogIG11dGF0ZShjb3VudHJ5ID0gaWZfZWxzZShncmVwbCgiKD9pKWFtZXIiLCBjb3VudHJ5KSwiVVNBIixjb3VudHJ5KSkgJT4lIA0KICBtdXRhdGUoY291bnRyeSA9IGlmX2Vsc2UoZ3JlcGwoIig/aSlzdGF0IiwgY291bnRyeSksIlVTQSIsY291bnRyeSkpICU+JSANCiAgbXV0YXRlKGNvdW50cnkgPSBpZl9lbHNlKGdyZXBsKCIoP2kpc3Vic2NyaWJlKy4qIiwgY291bnRyeSksTkFfY2hhcmFjdGVyXyxjb3VudHJ5KSkgDQojbWFrZSB2ZWN0b3JzIG9mIFVTQSBvdXRsaWVycyBhbmQgc29tZSB0byBjaGFuZ2UgdG8gTkEgdmFsdWVzDQp1c2Ffb3V0bGllcnMgPSBjKCJBbGFza2EiLCAiQ2FsaWZvcm5pYSIsICJFVUEiLCAiTWVyaWNhIiwgIk11cmljYSIsICJtdXJyaWthIiwNCiAgICAgICAgICAgICAgICAgIk5ldyBKZXJzZXkiLCAiTmV3IFlvcmsiLCAiTm9ydGggQ2Fyb2xpbmEiLCAiUGl0dHNidXJnaCIsIA0KICAgICAgICAgICAgICAgICAiVGhlIFlvbyBFc3Mgb2YgQWFheXl5eXl5IiwgIlRydW1waXN0YW4iLCAiVSBTIiwgInUgcyBhIiwgInUucy4iLA0KICAgICAgICAgICAgICAgICAiVS5zLiIsICJVLlMuIiwgInUucy5hLiIsICJVLlMuQS4iLCAiVUQiLCAidXMiLCAiVXMiLCAiVVMiLCAiVVMgb2YgQSIsDQogICAgICAgICAgICAgICAgICJVU1NBIiwgIidtZXJpY2EiKQ0KY2hhbmdlX3RvX05BID0gYygxLCAzMC4wLCAzMiwgMzUsIDQ0LjAsIDQ1LCA0NS4wLCA0NiwgNDcuMCwgNTEuMCwgNTQuMCkNCmNoYW5nZV90b19OQTIgPSBjKCIzMC4wIiwgIjQ0LjAiLCAiNDUuMCIsICI0Ny4wIiwgIjUxLjAiLCAiNTQuMCIpDQpvdGhlcnMgPSBjKA0KICAiQSB0cm9waWNhbCBpc2xhbmQgc291dGggb2YgdGhlIGVxdWF0b3IiLCAiQSIsICJBdGxhbnRpcyIsDQogICJDYW5hZSIsICJjYXNjYWRpYSAiLCAiQ2FzY2FkaWEiLCAiRGVuaWFsIiwgIkVhcnRoIiwgIkZlYXIgYW5kIExvYXRoaW5nIiwgDQogICJnb2QncyBjb3VudHJ5IiwgIkkgZG9uJ3Qga25vdyBhbnltb3JlIiwgImluc2FuaXR5IGxhdGVseSIsIA0KICAidGhlcmUgaXNuJ3Qgb25lIGZvciBvbGQgbWVuIiwgInNvdmlldCBjYW51Y2tpc3RhbiIsICJOYXJuaWEiLCAiTmV2ZXJsYW5kIiwNCiAgIm9uZSBvZiB0aGUgYmVzdCBvbmVzIiwgIlNlZSBhYm92ZSIsICJTb21ld2hlcmUiLCANCiAgIlN1YnNjcmliZSBUbyBEbTR1ejMgT24gWW91dHViZSIsICJUaGUgcmVwdWJsaWMgb2YgQ2FzY2FkaWEiLCAidGhpcyBvbmUiLCANCiAgIkV1cm9wZSIsICIgQ2FzY2FkaWEiLCAiQ2FzY2FkaWEgIikNCmNhbmR5DQpgYGANCg0KYGBge3J9DQpjYW5keSA8LSBjYW5keSAlPiUNCm11dGF0ZShjb3VudHJ5ID0gaWZfZWxzZShjb3VudHJ5ICVpbiUgdXNhX291dGxpZXJzICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAiVVNBIiwgY291bnRyeSkpICU+JSANCiAgbXV0YXRlKGNvdW50cnkgPSBpZl9lbHNlKGNvdW50cnkgJWluJSBvdGhlcnN8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnkgJWluJSBjaGFuZ2VfdG9fTkF8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnkgJWluJSBjaGFuZ2VfdG9fTkEyLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BX2NoYXJhY3Rlcl8sIGNvdW50cnkpKSAlPiUgDQogIG11dGF0ZShjb3VudHJ5ID0gc3RyX3RvX3RpdGxlKGNvdW50cnkpKSANCmNhbmR5DQpgYGANCmBgYHtyfQ0KY2FuZHkgPC0gY2FuZHkgJT4lDQptdXRhdGUoY291bnRyeSA9IHJlY29kZShjb3VudHJ5LCAiVGhlIE5ldGhlcmxhbmRzIiA9ICJOZXRoZXJsYW5kcyIpLA0KICAgICAgIGNvdW50cnkgPSByZWNvZGUoY291bnRyeSwgIkNhbiIgPSAiQ2FuYWRhIiksDQogICAgICAgY291bnRyeSA9IHJlY29kZShjb3VudHJ5LCAiQ2FuYWRhYCIgPSAiQ2FuYWRhIiksDQogICAgICAgY291bnRyeSA9IHJlY29kZShjb3VudHJ5LCAiRW5kbGFuZCIgPSAiVW5pdGVkIEtpbmdkb20iKSwNCiAgICAgICBjb3VudHJ5ID0gcmVjb2RlKGNvdW50cnksICJFbmdsYW5kIiA9ICJVbml0ZWQgS2luZ2RvbSIpLA0KICAgICAgIGNvdW50cnkgPSByZWNvZGUoY291bnRyeSwgIkVuZ2xhbmQiID0gIlVuaXRlZCBLaW5nZG9tIiksDQogICAgICAgY291bnRyeSA9IHJlY29kZShjb3VudHJ5LCAiU2NvdGxhbmQiID0gIlVuaXRlZCBLaW5nZG9tIiksDQogICAgICAgY291bnRyeSA9IHJlY29kZShjb3VudHJ5LCAiRXNwYcOxYSIgPSAiU3BhaW4iKSwNCiAgICAgICBjb3VudHJ5ID0gcmVjb2RlKGNvdW50cnksICJVLmsuIiA9ICJVbml0ZWQgS2luZ2RvbSIpLA0KICAgICAgIGNvdW50cnkgPSByZWNvZGUoY291bnRyeSwgIlVrIiA9ICJVbml0ZWQgS2luZ2RvbSIpLA0KICAgICAgIGNvdW50cnkgPSByZWNvZGUoY291bnRyeSwgIlVuaXRlZCBLaW5kb20iID0gIlVuaXRlZCBLaW5nZG9tIikpDQpjYW5keQ0KYGBgDQpgYGB7cn0NCiMgQ29udmVydGluZyB0aGUgYWdlIHZhcmlhYmxlIHRvIG51bWVyaWMNCmNhbmR5IDwtIGNhbmR5ICU+JSANCiAgbXV0YXRlKGFnZSA9IGFzLm51bWVyaWMoYWdlKSkgJT4lIA0KICBtdXRhdGUoYWdlID0gaWZlbHNlKGFnZT4xMjIsIE5BLCBhZ2UpKQ0KY2FuZHkNCmBgYA0KDQpgYGB7cn0NCiN3cml0ZSBkYXRhIHRvIGNzdg0KY2FuZHkgJT4lIA0KICB3cml0ZV9jc3YoIi4uL2NsZWFuX2RhdGEvY2FuZHlfY2xlYW4uY3N2IikNCmBgYA0KDQo=